﻿/**
 *
 * @file FITKPhyscisPropertyRibInfo.h
 * @brief 加筋板单向加筋信息类定义
 * @author LiBaojun (libaojunqd@foxmail.com)
 * @date 2024-10-18
 *
 */
#ifndef FITK_PHYSCIS_PROPERTY_RIB_INFO_H_
#define FITK_PHYSCIS_PROPERTY_RIB_INFO_H_

#include "FITK_Kernel/FITKCore/FITKAbstractNDataObject.h"
#include "FITKAcousticsPhysicsAPI.h"

namespace Acoustics
{
    class FITKAcousticsAbsPhysicsProp;
    /**
    * @brief 加筋板单向加筋信息数据结构定义
    * @author liuzhiyuan(liuzhiyuan@diso.cn)
    * @date 2024-10-15
    */
    class FITKAcousticsPhysicsAPI FITKPhyscisPropertyRibInfo : public Core::FITKAbstractNDataObject
    {
        FITKCLASS(Acoustics, FITKPhyscisPropertyRibInfo);
        Q_OBJECT
    public:
        /**
        * @brief 构造函数
        * @author LiBaojun (libaojunqd@foxmail.com)
        * @date 2024-10-15
        */
        explicit FITKPhyscisPropertyRibInfo() = default;
        /**
        * @brief 析构函数
        * @author LiBaojun (libaojunqd@foxmail.com)
        * @date 2024-10-15
        */
        virtual ~FITKPhyscisPropertyRibInfo() = default;
        /**
         * @brief 设置梁属性ID
         * @param[i]  id             梁属性id
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-24
         */
        void setBeamPropID(const int id);
        /**
        * @brief 获取梁属性ID
        * @return int 梁属性ID
        * @author LiBaojun (libaojunqd@foxmail.com)
        * @date 2024-10-24
        */
        int getBeamPropID();
        /**
        * @brief 获取梁属性对象
        * @return FITKAcousticsAbsPhysicsProp* 梁属性对象
        * @author LiBaojun (libaojunqd@foxmail.com)
        * @date 2024-10-24
        */
        FITKAcousticsAbsPhysicsProp* getBeamPropObj();

      /**
        * @brief 获取加筋间距
        * @return double 加筋间距
        * @author liuzhiyuan(liuzhiyuan@diso.cn)
        * @date 2024-10-15
        */
       double getSpacing() const;
       /**
        * @brief 设置加筋间距
        * @param[i] spacing 加筋间距
        * @author liuzhiyuan(liuzhiyuan@diso.cn)
        * @date 2024-10-15
        */
       void setSpacing(double spacing);
       /**
        * @brief 获取加筋梁截面中心偏移
        * @return double 加筋梁截面中心偏移
        * @author liuzhiyuan(liuzhiyuan@diso.cn)
        * @date 2024-10-15
        */
       double getOffset() const;
       /**
        * @brief 设置加筋梁截面中心偏移
        * @param[i] offset 加筋梁截面中心偏移
        * @author liuzhiyuan(liuzhiyuan@diso.cn)
        * @date 2024-10-15
        */
       void setOffset(double offset);
       /**
        * @brief 获取梁截面方向角度
        * @return double 梁截面方向角度
        * @author liuzhiyuan(liuzhiyuan@diso.cn)
        * @date 2024-10-15
        */
       double getOrientation() const;
       /**
        * @brief 设置梁截面方向角度
        * @param[i] orientation 梁截面方向角度
        * @author liuzhiyuan(liuzhiyuan@diso.cn)
       * @date 2024-10-15
        */
       void setOrientation(double orientation);
       /**
        * @brief 设置加筋间距的标准偏差比例
        * @param[i]  dev           标准差
        * @author LiBaojun (libaojunqd@foxmail.com)
        * @date 2024-10-24
        */
       void setSpacingDevFraction(const double dev);
        /**
        * @brief 获取加筋间距的标准偏差比例
        * @return double 加筋间距的标准偏差比例
        * @author LiBaojun (libaojunqd@foxmail.com)
        * @date 2024-10-15
        */
       double getSpacingDevFraction() const;

       /**
      * @brief 数据是否被使用（关联）
      * @param[i]  data           被检查的数据ID
      * @return true              管理器中使用了Data中包含的数据
      * @return false             管理器中没有使用Data中包含的数据
      * @author libaojun (libaojunqd@foxmail.com)
      * @date 2025-02-08
      */
       virtual bool isUsedDataObject(const QList<int> & dataIDs) override;
       
    private:
        /**
        * @brief  梁属性ID
        * @author LiBaojun (libaojunqd@foxmail.com)
        * @date   2024-10-15
        */
        int _beamPropID{ -1 };
        /**
        * @brief  加筋间距
        * @author liuzhiyuan(liuzhiyuan@diso.cn)
        * @date   2024-10-15
        */
        double _spacing { 0.0 };
        /**
        * @brief  加筋梁截面积中心偏移
        * @author liuzhiyuan(liuzhiyuan@diso.cn)
        * @date   2024-10-15
        */
        double _offset { 0.0 };
       /**
        * @brief  梁截面方向角度
        * @author liuzhiyuan(liuzhiyuan@diso.cn)
        * @date   2024-10-15
        */
        double _orientation{ 0.0 };
        /**
        * @brief  加筋间距的标准偏差比例
        * @author LiBaojun (libaojunqd@foxmail.com)
        * @date   2024-10-15
        */
        double _spacingDevFraction{ 0.0 };

    };
}

#endif // FITKPHYSCISPROPERTYRIB_H
